package com.itheima.test03;

/**
 * 在数组{1,2,3,4,5,6,7,8,9,10}中,查找某个元素的位置
 * 数组有序
 * 定义一个方法  用来获取指定数据在指定数组中的索引
 * 参数: 数组  数值
 * 返回值类型  int  索引
 *
 *
 * 1.定义三个变量  min  mid  max
 * 2.循环 比较mid上的值和穿进去的值是否相同
 * mid =折半 min和max 的和的一般
 * 3.相同 返回mid 的值
 * 4.大了 min往后移 移动到 mid+1
 * 5.小了 max往前移 移动到 mid-1
 * 6.min>max  或者 max<min  循环的条件min<=max
 * 7.出圈了就-1
 *
 * 最小时间复杂度 0
 * 最大 时间复杂度是n/2到除不尽 循环的次数
 *
 */
public class Test02 {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6,7,8,9,10};
        System.out.println(getIndex(arr,10));
    }
    //定义方法
    public  static int getIndex(int[] arr,int number){
      //1.定义三个变量  min  mid  max
        int min=0;
        int max=arr.length-1;
        int mid=(min+max)/2;
        // * 2.循环 比较mid上的值和穿进去的值是否相同
        while(min<=max){
            //min  max  mid  arr[mid]
            // * mid =折半 min和max 的和的一般
            // * 3.相同 返回mid 的值
            // * 4.大了 min往后移 移动到 mid+1
            // * 5.小了 max往前移 移动到 mid-1
            mid=(min+max)/2;
            if(arr[mid]==number){
                return mid;
            }else if(number>arr[mid]){
                min=mid+1;
            }else{
                max=mid-1;
            }

        }

        // * 6.min>max  或者 max<min  循环的条件min<=max
        // * 7.出圈了就-1
        return -1;

    }
}
